;Exam2010H22tPrg1 _̉Z
;---------------------------------
MAIN START
	LAD GR1,X
	LAD GR2,Y
	LAD GR3,Z
	CALL FADD
	RET
X 	DC #0080 ; Ǝwij
	DC #8033 ;       ij
Y 	DC #0080 ; Ǝwij
	DC #A055 ;       ij
Z 	DS 2     ; Zʊi[̈
	END
;-------------
FADD START ; Z <-- X + Y
	RPUSH
	PUSH 0,GR3   ;ʂẙi[̈̐擪Ԓnޔ
	LD GR4,0,GR1 ;
	AND GR4,=#00FF ;Ex: X̎w
	LD GR5,0,GR2   ;
	AND GR5,=#00FF ;Ex: Y̎w
	LD GR6,1,GR1   ;Mx: X̉
	LD GR7,1,GR2   ;My: Ỷ
;ZȌiw낦j
;GR4 <-- max(Ex, Ey), GR6 <--Mx, GR7 <--ςMy
	LD GR3,GR4     ; X̎w
	CPL GR4,GR5
	JZE MADD       ; Ex = Ey@̏ꍇ
	JMI BIGEV      ; Ex < Ey@̏ꍇ
	SUBL GR3,GR5
	SRL GR7,0,GR3  ; My@𒲐
	JUMP MADD
BIGEV  LD GR4,GR5   ; a @
	SUBL GR5,GR3
	SRL GR6,0,GR5  ; Mx@𒲐
;l̉Z
; Sz : Z̕ , Ex: Z̎w , Mz: Z̉
; GR4 <--(Sz, Ez), GR5 <--Mz
MADD LD GR1,0,GR1   ;X̌̕
	JMI XMINUS      ;̏ꍇ
	LD GR2,0,GR2    ;Y̌̕
	JPL ADDMXY      ;b  Y > 0 ̏ꍇ@@G
	LD GR5,GR6      ;X >= 0, Y <= 0@̏ꍇ
	SUBL GR5,GR7    ;Mz <-- ςMx - ςMy
	JUMP SCHECK
XMINUS LD GR2,0,GR2
	JMI YMINUS
	LD GR5,GR7
	SUBL GR5,GR6
	JUMP SCHECK      ; c @J
YMINUS OR GR4,=#8000 ; Sz ɕ̕ݒ
ADDMXY LD GR5,GR6    ;ς݉̉Zs
	ADDL GR5,GR7     ;Mz <-- ςMx + ςMy
	JOV ADJST        ;オ肪ꍇ̐K
	JUMP NORM
SCHECK JOV NEGMZ     ; Mz@̌̕
	JUMP NORM
NEGMZ OR GR4,=#8000  ; Szɕݒ
	XOR GR5,=#FFFF   ; Mz <-- -Mz
	ADDL GR5,=1
;
NORM LD GR5,GR5     ;[`FbN
	JNZ LOOP        ; 
	LD GR4,=0
	JUMP FIN
LOOP LD GR5,GR5   ;KH
	JMI FIN       ;ŏʌP̏ꍇ
	SLL GR5,1    ;d ŏʌPƂȂ悤ɍVtg@@C
	SUBL GR4,=1   ;wP
	JUMP LOOP
ADJST SRL GR5,1    ;オ̑
	OR GR5,=#8000 ; Mz ̍ŏʃrbg1ɐݒ
	ADDL GR4,=1   ; e@@A
FIN POP GR3
	ST GR4,0,GR3  ; ʁ@Z@̊i[
	ST GR5,1,GR3
	RPOP
	RET
	END
;-----------------
